#ifndef __WIZ_INNER_THREAD_HPP__SHANHAOBO_19800429__
#define __WIZ_INNER_THREAD_HPP__SHANHAOBO_19800429__

#include "../../Include/System/Thread/WizThread.hpp"
#include "../../Include/System/Thread/WizThreadRunnable.hpp"
#include "../../Include/System/Thread/WizThreadTLS.hpp"

namespace Wiz
{
    namespace Inner
    {
        namespace Thread
        {
            ////////////////////////////////////////////////////////////////
            class WIZ_PRIVATE Type : public ::Wiz::Thread::Type::Core_t
            {
            protected:
                ::Wiz::Thread::Runnable::Ptr  m_Runnable;
            public:
                Type(::Wiz::Thread::Runnable::Ptr r) : m_Runnable(r){}
                virtual ~Type(){}
            public:
                virtual ::Wiz::Bool::Type Start() = 0;
            };
            WIZ_DECLARE(::Wiz::Inner::Thread::Type);
            ////////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////////
            namespace TLS
            {
                ::Wiz::Void::Type CreateCurrentThreadTLSKey();
                ::Wiz::Void::Type CleanUpTLSKey();
                ::Wiz::Thread::Runnable::Ptr GetCurrentRunnablePtr();
                ::Wiz::Void::Type SetCurrentRunnablePtr(::Wiz::Void::Ptr);
            } /// end of namespace TLS
            ////////////////////////////////////////////////////////////////
        } /// end of namespace Thread
    } /// end of namespace Inner
} /// end of namespace Wiz

#endif /*__WIZ_INNER_THREAD_HPP__SHANHAOBO_19800429__*/
